/* 
模拟的权限管理  
条件是 登录的哪个用户只能修改哪个用户的动态  不能修改其他用户
*/

const { NOPOWER } = require("../config/error.js");
const momentServer = require("../server/momentServer.js");
const permissionServer = require("../server/permissionServer.js");

// 单一的权限 只对moment做了权限控制

const verifyMomentPermission = async (ctx, next) => {
	// 获取用户id  修改的动态id
	const { momentId } = ctx.params;
	const { id } = ctx.user;

	const res = await momentServer.permissionByIdServer(momentId, id);
	if (res.length === 0) {
		return ctx.app.emit("error", NOPOWER, ctx);
	}
	await next();
};

// 改装代码 动态控制
const verifyPermission = async (ctx, next) => {
	// 获取登录用户id
	const { id } = ctx.user;

	// 获取资源id、name
	// name => moment / user / comment / label  意思是接口命名时 要规范
	// params: { momentId : 4 }

	const keyName = Object.keys(ctx.params)[0];
	const resourceId = ctx.params[keyName]; // 获取资源id
	const resourceName = keyName.replace("Id", "");

	const res = await permissionServer.checkResouce(
		resourceName,
		resourceId,
		id
	);
	if (res.length === 0) {
		return ctx.app.emit("error", NOPOWER, ctx);
	}
	await next();
};

module.exports = { verifyMomentPermission, verifyPermission };
